package com.etc.service.arithmetic;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONException;

//路径的详细规划
public class DetailWayMessage {

	public static void main(String[] args) throws JSONException {
		List<ScenicMessage> list = new ArrayList<>();
		ScenicMessage s1 = new ScenicMessage(0,"蔡塘广场",24.48923061,118.16388605,4);
		ScenicMessage s2 = new ScenicMessage(1,"人才中心",24.48923061,118.10388605,2);
		ScenicMessage s3 = new ScenicMessage(2,"兴源社区",24.51923061,118.13388605,3);
		ScenicMessage s4 = new ScenicMessage(3,"南普陀",24.44923061,118.10388605,6);
		ScenicMessage s5 = new ScenicMessage(4,"何厝边防",24.48923061,118.20388605,1);
		list.add(s1);
		list.add(s2);
		list.add(s3);
		list.add(s4);
		list.add(s5);
		//获取最佳路径
		List<TakeCatWay> listTCW = BuildMatrix.planWay(list);
		
		List<TakeCatWay> listt =detailHotel(listTCW,1);
		for (TakeCatWay takeCatWay : listt) {
			System.out.println(takeCatWay);
			if(takeCatWay.getHotelJson()!=null) {
				System.out.println(takeCatWay.getHotelJson());
			}
			System.out.println("**********************************");
		}
		
	}
	
	/**
	 * 根据路线推荐住宿
	 * @param listTCW 最佳路线
	 * @param rsort_rule	住宿类型：1：经济型；0：豪华型
	 * @return
	 * @throws JSONException
	 */
	public static List<TakeCatWay> detailHotel(List<TakeCatWay> listTCW ,int rsort_rule) throws JSONException{
		
		double datetime=0;//当游玩时长，豪华套餐时当景点游玩时间超过8个小时就进行酒店推荐；经济套餐当游玩时间超过10小时就推荐酒店
		for(int i=0;i<listTCW.size();i++) {
			
			datetime = datetime+listTCW.get(i).getDuration()+listTCW.get(i).getTime();
			
			if(rsort_rule==1) {//经济型套餐
				if(datetime>10&&datetime<13) {//行程超过10小时且在13小时之内就在附近的景点推荐酒店
					HotelJson hj = HotelRecommend.getHotelMessage(listTCW.get(i).getStarX(), listTCW.get(i).getStarY(), rsort_rule);
					listTCW.get(i).setHotelJson(hj);
					datetime=0;
				}else if(i!=0&&datetime>13&&((listTCW.get(i).getDuration()+listTCW.get(i).getTime())<3)){//行程超过13小时，且最后一个景点的游玩时间低于3小时就在当前景点推荐住宿酒店
					HotelJson hj = HotelRecommend.getHotelMessage(listTCW.get(i).getStarX(), listTCW.get(i).getStarY(), rsort_rule);
					listTCW.get(i).setHotelJson(hj);
					datetime=0;
				}else if(i!=0&&datetime>13&&((listTCW.get(i).getDuration()+listTCW.get(i).getTime())>3)) {//行程超过13小时，且最后一个景点的游玩时间超过3小时就在上个景点推荐住宿酒店
					HotelJson hj = HotelRecommend.getHotelMessage(listTCW.get(i-1).getStarX(), listTCW.get(i-1).getStarY(), rsort_rule);
					listTCW.get(i-1).setHotelJson(hj);
					datetime=listTCW.get(i).getDuration()+listTCW.get(i).getTime();
				}else if(listTCW.size()==1||(i==listTCW.size()-1&&datetime<10)) {//当旅游景点为1个或者所有的景点游玩时间总和都低于10小时时就在当下景点推荐住宿酒店
					HotelJson hj = HotelRecommend.getHotelMessage(listTCW.get(i).getStarX(), listTCW.get(i).getStarY(), rsort_rule);
					listTCW.get(i).setHotelJson(hj);
					datetime=0;
				}
			}else if(rsort_rule==0) {//豪华住宿套餐
				if(datetime>8&&datetime<10) {//行程超过8小时且在10小时之内就在附近的景点推荐酒店
					HotelJson hj = HotelRecommend.getHotelMessage(listTCW.get(i).getStarX(), listTCW.get(i).getStarY(), rsort_rule);
					listTCW.get(i).setHotelJson(hj);
					datetime=0;
				}else if(i!=0&&datetime>10&&((listTCW.get(i).getDuration()+listTCW.get(i).getTime())<3)){//行程超过10小时，且最后一个景点的游玩时间低于3小时就在当前景点推荐住宿酒店
					HotelJson hj = HotelRecommend.getHotelMessage(listTCW.get(i).getStarX(), listTCW.get(i).getStarY(), rsort_rule);
					listTCW.get(i).setHotelJson(hj);
					datetime=0;
				}else if(i!=0&&datetime>10&&((listTCW.get(i).getDuration()+listTCW.get(i).getTime())>3)) {//行程超过10小时，且最后一个景点的游玩时间超过3小时就在上个景点推荐住宿酒店
					HotelJson hj = HotelRecommend.getHotelMessage(listTCW.get(i-1).getStarX(), listTCW.get(i-1).getStarY(), rsort_rule);
					listTCW.get(i-1).setHotelJson(hj);
					datetime=listTCW.get(i).getDuration()+listTCW.get(i).getTime();
				}else if(listTCW.size()==1||(i==listTCW.size()-1&&datetime<8)) {//当旅游景点为1个或者所有的景点游玩时间总和都低于8小时时就在当下景点推荐住宿酒店
					HotelJson hj = HotelRecommend.getHotelMessage(listTCW.get(i).getStarX(), listTCW.get(i).getStarY(), rsort_rule);
					listTCW.get(i).setHotelJson(hj);
					datetime=0;
				}
			}
			
		}
		
		
		return listTCW;
	}
	
}
